import asyncio
import threading

# 定义第一个异步函数
async def async_fun1():
    while True:
        print("异步函数 1 -----------")
        await asyncio.sleep(2)  # 模拟耗时操作

# 定义第二个异步函数
async def async_fun2():
    while True:
        print("异步函数 2 +++++++++++")
        await asyncio.sleep(2)  # 模拟耗时操作

# 函数中运行多个异步函数
def run_multi_async_task():
    # 创建一个新的事件循环
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        # 使用 asyncio.gather 并发运行多个异步函数
        tasks = [async_fun1(), async_fun2()]
        # loop.run_until_complete(asyncio.gather(*tasks)) # --> 运行正常
        loop.run_until_complete(asyncio.gather(async_fun1(), async_fun2()))
    finally:
        # 关闭事件循环
        loop.close()

# 异步函数中运行多个异步函数
async def run_multi_async_task_v2():
    # 获取当前事件循环
    loop = asyncio.get_event_loop()
    try:
        # 使用 asyncio.gather 并发运行多个异步函数
        tasks = [async_fun1(), async_fun2()]
        # loop.run_until_complete(asyncio.gather(*tasks)) # --> NG, 异步函数中不能使用 run_until_complete
        await asyncio.gather(async_fun1(), async_fun2())
    finally:
        # 关闭事件循环
        loop.close()

if __name__ == "__main__":
    flag = 2
    if flag == 1:
        run_multi_async_task()
    else:
        asyncio.run(run_multi_async_task_v2())